package edu.ccut.saturn.component.impl.sql;

import java.util.List;
import java.util.Map;

import edu.ccut.saturn.component.SaturnComponentException;

/**
 * sql描述信息中<IsEmpty>标签的模型类。用户指定的属性可以是<code>Collection</code>类型或<code>String</code>类型的实例。
 * 当用户指定的属性是<code>Collection</code>类型的实例时，需要判断<code>Collection</code>的size()方法的值是否为0；
 * 当用户指定的属性是<code>String</code>类型的实例时，需要判断字符串的是否是null或""（空串）；
 * 当集合的size是0或字符串的值是null或""时，返回经过解析的sql语句的片段；否则返回空串。
 * 
 * @author 温建
 * 
 */
public class IsEmptyItemInfo extends AbstractSingleExprSqlItemInfo {

	public IsEmptyItemInfo(String prepend, String property) {
		super(prepend, property);
	}

	@SuppressWarnings("unchecked")
	@Override
	public String getSubSql(Map<String, Object> param) throws Exception {

		if (this.getProperty() != null && param.get(this.getProperty()) != null) {

			if (param.get(this.getProperty()) instanceof List) {

				if (((List) param.get(this.getProperty())).size() == 0) {
					return parseSql(param);

				} else {
					return " ";
				}
			}

			if (param.get(this.getProperty()) instanceof Map) {

				if (((Map) param.get(this.getProperty())).size() == 0) {
					return parseSql(param);

				} else {
					return " ";
				}
			}

			if (String.valueOf(param.get(this.getProperty())) == null
					|| "".equals(param.get(this.getProperty()))) {

				return parseSql(param);

			} else {
				return " ";
			}
		}
		throw new SaturnComponentException("");
	}

	@Override
	public String getType() {
		return "isEmpty";
	}
}
